查看原文
其他

STM8S芯片GPIO脚复用AD功能后无法回到GPIO状态问题

miler 茶话MCU 2022-09-11

STM8S芯片GPIO脚复用AD功能后无法回到GPIO状态问题

整理:Miler Shao QQ: 332537577

某日,一工程师使用STM8S芯片开发产品,其管脚资源比较紧张。某一GPIO口被复用为AD输入脚做相关AD检测。之后,把该脚AD功能禁用掉,把该口配置切换为带下降沿触发的EXTI触发脚,之后让芯片进入睡眠。当然,休眠时该口处于高电平。

奇怪的是,那样设置后根本没法唤醒。即使不做休眠,做好切换配置后,直接查看该脚的IDR位的电平,发现始终提示为0.

后来一起查看代码,发现在配置AD时,他配置了ADC_TDR寄存器,目的是关闭跟该脚相关的GPIO 模块里的一个施密特触发器。IO口复用为AD时,关闭它是合理的。但它作为AD完成使命后,切换为
GPIO功能时,工程师忽略了ADC_TDR寄存器,让它依旧保持原值。结果是,AD虽然关了,但施密特触发器还是关闭的。麻烦就出在这里。看看下图就明白了,当那施密特被关闭时,它的输出始终是0,即红色箭头所指位置。那此时读输入寄存器【IDR】,自然提示输入为0,还哪来下降沿呢。

后来,让他在做从AD切换到GPIO功能时,同时修改了ADC_TDR寄存器让施密特

打开后就都正常了。

其实,对于STM32的这个地方,结构类似。只是STM32没有了这个专门的寄存器,在GPIO口复用为AD输入时,
硬件自动关闭了施密特触发器,而当切换为普通GPIO或其它复用功能时,硬件自动打开了该施密特触发器。可以看
看相关说明和框图:





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存